<?php
// 保存项目接口
// 对应原来的 /hbsw-save POST 接口

require_once 'config.php';
require_once 'Database.php';

// 设置响应头
setJsonHeader();

try {
    // 只接受POST请求
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        sendErrorResponse('只接受POST请求', 405);
    }
    
    // 获取POST数据
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);
    
    // 检查JSON解析是否成功
    if (json_last_error() !== JSON_ERROR_NONE) {
        sendErrorResponse('JSON格式错误: ' . json_last_error_msg());
    }
    
    // 检查必需字段
    if (!isset($data['flag']) || !isset($data['title']) || !isset($data['content'])) {
        sendErrorResponse('缺少必需参数: flag, title, content');
    }
    
    // 获取并验证数据
    $flag = trim($data['flag']);
    $title = trim($data['title']);
    $desc = isset($data['desc']) ? trim($data['desc']) : '';
    $content = $data['content'];
    
    // 输入验证
    if (empty($flag)) {
        sendErrorResponse('flag不能为空');
    }
    
    if (empty($title)) {
        sendErrorResponse('title不能为空');
    }
    
    if (strlen($flag) > 255) {
        sendErrorResponse('flag长度不能超过255个字符');
    }
    
    if (strlen($title) > 255) {
        sendErrorResponse('title长度不能超过255个字符');
    }
    
    if (strlen($desc) > 255) {
        sendErrorResponse('desc长度不能超过255个字符');
    }
    
    // 对输入进行HTML转义，防止XSS攻击
    $flag = htmlspecialchars($flag, ENT_QUOTES, 'UTF-8');
    $title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
    $desc = htmlspecialchars($desc, ENT_QUOTES, 'UTF-8');
    
    // 验证content是否为有效的JSON
    $contentJson = json_decode($content, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        sendErrorResponse('content必须是有效的JSON格式');
    }
    
    // 限制content大小（例如最大1MB）
    if (strlen($content) > 1024 * 1024) {
        sendErrorResponse('content大小不能超过1MB');
    }
    
    // 创建数据库操作实例
    $db = new Database();
    
    // 保存项目
    $result = $db->saveProject($flag, $title, $desc, $content);
    
    if ($result) {
        sendSuccessResponse($result, '项目保存成功');
    } else {
        sendErrorResponse('项目保存失败');
    }
    
} catch (Exception $e) {
    error_log("保存项目失败: " . $e->getMessage());
    sendErrorResponse('保存项目失败');
}